home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / StringCompare.p < prev    next >
Text File  |  1996-05-01  |  14KB  |  330 lines

  1. {
  2.      File:        StringCompare.p
  3.  
  4.      Contains:    Public interfaces for String Comparison and related operations
  5.  
  6.      Version:    Technology:    System 7.0 through System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT StringCompare;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __STRINGCOMPARE__}
  28. {$SETC __STRINGCOMPARE__ := 1}
  29.  
  30. {$I+}
  31. {$SETC StringCompareIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __TEXTCOMMON__}
  38. {$I TextCommon.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __SCRIPT__}
  41. {$I Script.p}
  42. {$ENDC}
  43. {$IFC UNDEFINED __TEXTOBJECTS__}
  44. {$I TextObjects.p}
  45. {$ENDC}
  46. {$IFC UNDEFINED __LOCALEOBJECTS__}
  47. {$I LocaleObjects.p}
  48. {$ENDC}
  49. {$IFC UNDEFINED __TEXTPARSER__}
  50. {$I TextParser.p}
  51. {$ENDC}
  52.  
  53. {$PUSH}
  54. {$ALIGN MAC68K}
  55. {$LibExport+}
  56.  
  57. {
  58.  
  59.     Here are the current System 7 routine names and the translations to the older forms.
  60.     Please use the newer forms in all new code and migrate the older names out of existing
  61.     code as maintenance permits.
  62.     
  63.     NEW NAME                    OLD NAME                    OBSOLETE FORM (no handle)
  64.     
  65.     CompareString (Str255)        IUCompPString (hp only)        IUCompString (hp only)
  66.     CompareText (ptr/len)        IUMagPString                IUMagString
  67.     IdenticalString (Str255)    IUEqualPString (hp only)    IUEqualString  (hp only)
  68.     IdenticalText (ptr/len)        IUMagIDPString                IUMagIDString
  69.     LanguageOrder                IULangOrder
  70.     ScriptOrder                    IUScriptOrder
  71.     StringOrder (Str255)        IUStringOrder (hp only)
  72.     TextOrder (ptr/len)            IUTextOrder
  73.  
  74.     RelString
  75.     CmpString (a only)                    
  76.     EqualString (hp only)
  77.     
  78.     ReplaceText
  79.  
  80. }
  81. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  82.  
  83. CONST
  84.                                                                 {  Special language code values for Language Order }
  85.     systemCurLang                = -2;                            {  current (itlbLang) lang for system script }
  86.     systemDefLang                = -3;                            {  default (table) lang for system script }
  87.     currentCurLang                = -4;                            {  current (itlbLang) lang for current script }
  88.     currentDefLang                = -5;                            {  default lang for current script }
  89.     scriptCurLang                = -6;                            {  current (itlbLang) lang for specified script }
  90.     scriptDefLang                = -7;                            {  default language for a specified script }
  91.  
  92. {  obsolete names }
  93.     iuSystemCurLang                = -2;
  94.     iuSystemDefLang                = -3;
  95.     iuCurrentCurLang            = -4;
  96.     iuCurrentDefLang            = -5;
  97.     iuScriptCurLang                = -6;
  98.     iuScriptDefLang                = -7;
  99.  
  100. {$ENDC}
  101. {  FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  102. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  103.  
  104. TYPE
  105.     CollationRef = ^LONGINT;
  106.     ConstBytePtr                        = ^UInt8;
  107. {  Collation object key names }
  108. {  Attribute names and values for CreateCollationRef }
  109.     CollateUsageAttributeValue            = FourCharCode;
  110.  
  111. CONST
  112.     kCollateUsageDictionary        = 'dict';
  113.     kCollateUsagePhoneDirectory    = 'phon';
  114.  
  115.  
  116. TYPE
  117.     CollateIdeoOrderAttributeValue        = FourCharCode;
  118.  
  119. CONST
  120.     kCollateIdeoOrderRadicalStroke = 'rdst';
  121.     kCollateIdeoOrderStrokeRadical = 'strd';
  122.  
  123. {  Override types and enums }
  124.  
  125. TYPE
  126.     CollationSetPtr = ^CollationSet;
  127.     CollationSet = RECORD
  128.         charGroup:                SInt8;
  129.         charClass:                SInt8;
  130.         charSubclassMask:        CharacterSubclassMask;
  131.     END;
  132.  
  133.     CollateSetOptions                    = OptionBits;
  134.  
  135. CONST
  136.     kCollateMakeIgnorableBit    = 0;
  137.     kCollateSkipPreprocessingBit = 1;
  138.     kCollateIgnoreAnnotationsBit = 2;
  139.  
  140.     kCollateMakeIgnorableMask    = $01;
  141.     kCollateSkipPreprocessingMask = $02;
  142.     kCollateIgnoreAnnotationsMask = $04;
  143.  
  144.  
  145. TYPE
  146.     CollationSetOptionSpecPtr = ^CollationSetOptionSpec;
  147.     CollationSetOptionSpec = RECORD
  148.         charGroup:                SInt8;
  149.         charClass:                SInt8;
  150.         charSubclassMask:        CharacterSubclassMask;
  151.         options:                CollateSetOptions;
  152.     END;
  153.  
  154.     CollateNumberOptions                = OptionBits;
  155.  
  156. CONST
  157.     kCollateNumbersByValueBits    = 0;
  158.     kCollateAllowThousandsSepBits = 2;
  159.     kCollateMoreThousandsSepBit    = 4;
  160.     kCollateAllowIdeoNumbersBit    = 5;
  161.  
  162.     kCollateNumbersByValueMask    = $03;
  163.     kCollateAllowThousandsSepMask = $0C;
  164.     kCollateMoreThousandsSepMask = $10;
  165.     kCollateAllowIdeoNumbersMask = $20;
  166.  
  167.                                                                 {  values for NumbersByValue subfield }
  168.     kCollateNumbersByValueUseLocale = 0;
  169.     kCollateNumbersByValueNo    = 1;
  170.     kCollateNumbersByValueYes    = 2;                            {  values for AllowThousands subfield }
  171.     kCollateAllowThousandsUseLocale = 0;
  172.     kCollateAllowThousandsNo    = 1;
  173.     kCollateAllowThousandsYes    = 2;                            {  values for MoreThousands subfield }
  174.     kCollateMoreThousandsUseLocale = 0;
  175.     kCollateMoreThousandsSkipLocale = 1;                        {  values for AllowIdeoNumbers subfield }
  176.     kCollateAllowIdeoNumbersNo    = 0;
  177.     kCollateAllowIdeoNumbersYes    = 1;
  178.  
  179.  
  180. TYPE
  181.     CollateOptions                        = OptionBits;
  182.  
  183. CONST
  184.     kCollateStandardOptions        = 0;
  185.  
  186.                                                                 {  For determining equivalence, differences in encoding and between composed }
  187.                                                                 {  and decomposed characters are ignored (they are always significant for }
  188.                                                                 {  ordering, however). To change this use the following bits: }
  189.     kCollateEncodingSensitiveBit = 8;
  190.     kCollateComposeSensitiveBit    = 9;                            {  For determining equivalence, diacritics and case are normally significant. }
  191.                                                                 {  Use the following bits to change this. }
  192.     kCollateCaseInsensitiveBit    = 10;
  193.     kCollateDiacriticInsensitiveBit = 11;                        {  The following bits determine the ordering for the NoLocale functions only. }
  194.     kCollateNoLocaleOrderBits    = 24;
  195.  
  196.     kCollateEncodingSensitiveMask = $00000100;
  197.     kCollateComposeSensitiveMask = $00000200;
  198.     kCollateCaseInsensitiveMask    = $00000400;
  199.     kCollateDiacriticInsensitiveMask = $00000800;
  200.     kCollateNoLocaleOrderMask    = $3F000000;
  201.  
  202.                                                                 {  values for NoLocaleOrder subfield }
  203.     kCollateMacHFSUnicodeCodeOrder = 0;                            {  HFS order for Mac encodings, code order for Unicode }
  204.  
  205. {  collation value for GetCollationKeyForTextString }
  206.  
  207. TYPE
  208.     CollationValue                        = UInt32;
  209.     CollateResult                        = SInt16;
  210. {$ENDC}
  211. {  FOR_SYSTEM8_PREEMPTIVE }
  212. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  213. {
  214.  The following functions are old names, but are required for System 7 PowerPC builds
  215.  becuase InterfaceLib exports these names, instead of the new ones.
  216. }
  217. FUNCTION IUMagPString(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER; itl2Handle: Handle): INTEGER;
  218.     {$IFC NOT GENERATINGCFM}
  219.     INLINE $3F3C, $001A, $A9ED;
  220.     {$ENDC}
  221. FUNCTION IUMagIDPString(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER; itl2Handle: Handle): INTEGER;
  222.     {$IFC NOT GENERATINGCFM}
  223.     INLINE $3F3C, $001C, $A9ED;
  224.     {$ENDC}
  225. FUNCTION IUTextOrder(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER; aScript: ScriptCode; bScript: ScriptCode; aLang: LangCode; bLang: LangCode): INTEGER;
  226.     {$IFC NOT GENERATINGCFM}
  227.     INLINE $3F3C, $0022, $A9ED;
  228.     {$ENDC}
  229. FUNCTION IUScriptOrder(script1: ScriptCode; script2: ScriptCode): INTEGER;
  230.     {$IFC NOT GENERATINGCFM}
  231.     INLINE $3F3C, $001E, $A9ED;
  232.     {$ENDC}
  233. FUNCTION IULangOrder(language1: LangCode; language2: LangCode): INTEGER;
  234.     {$IFC NOT GENERATINGCFM}
  235.     INLINE $3F3C, $0020, $A9ED;
  236.     {$ENDC}
  237. FUNCTION IUCompPString(aStr: Str255; bStr: Str255; itl2Handle: Handle): INTEGER;
  238. FUNCTION IUEqualPString(aStr: Str255; bStr: Str255; itl2Handle: Handle): INTEGER;
  239. FUNCTION IUStringOrder(aStr: Str255; bStr: Str255; aScript: ScriptCode; bScript: ScriptCode; aLang: LangCode; bLang: LangCode): INTEGER;
  240. {
  241.  The following are new names which are not exported by System 7 InterfaceLib for PowerPC.
  242.  For C the new names are mapped to the old names using #define.
  243. }
  244. FUNCTION CompareText(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER; itl2Handle: Handle): INTEGER;
  245.     {$IFC NOT GENERATINGCFM}
  246.     INLINE $3F3C, $001A, $A9ED;
  247.     {$ENDC}
  248. FUNCTION IdenticalText(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER; itl2Handle: Handle): INTEGER;
  249.     {$IFC NOT GENERATINGCFM}
  250.     INLINE $3F3C, $001C, $A9ED;
  251.     {$ENDC}
  252. FUNCTION TextOrder(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER; aScript: ScriptCode; bScript: ScriptCode; aLang: LangCode; bLang: LangCode): INTEGER;
  253.     {$IFC NOT GENERATINGCFM}
  254.     INLINE $3F3C, $0022, $A9ED;
  255.     {$ENDC}
  256. FUNCTION LanguageOrder(language1: LangCode; language2: LangCode): INTEGER;
  257.     {$IFC NOT GENERATINGCFM}
  258.     INLINE $3F3C, $0020, $A9ED;
  259.     {$ENDC}
  260. FUNCTION CompareString(aStr: Str255; bStr: Str255; itl2Handle: Handle): INTEGER;
  261. FUNCTION IdenticalString(aStr: Str255; bStr: Str255; itl2Handle: Handle): INTEGER;
  262. FUNCTION StringOrder(aStr: Str255; bStr: Str255; aScript: ScriptCode; bScript: ScriptCode; aLang: LangCode; bLang: LangCode): INTEGER;
  263. {
  264.  The following functions are new names that are exported by InterfaceLib
  265.  and work on both 68k and System 7 PowerPC.
  266. }
  267. FUNCTION ScriptOrder(script1: ScriptCode; script2: ScriptCode): INTEGER;
  268.     {$IFC NOT GENERATINGCFM}
  269.     INLINE $3F3C, $001E, $A9ED;
  270.     {$ENDC}
  271. FUNCTION ReplaceText(baseText: Handle; substitutionText: Handle; VAR key: Str15): INTEGER;
  272.     {$IFC NOT GENERATINGCFM}
  273.     INLINE $2F3C, $820C, $FFDC, $A8B5;
  274.     {$ENDC}
  275. {$ENDC}
  276. {  FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  277. {$IFC FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED }
  278. FUNCTION IUMagString(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER): INTEGER;
  279.     {$IFC NOT GENERATINGCFM}
  280.     INLINE $3F3C, $000A, $A9ED;
  281.     {$ENDC}
  282. FUNCTION IUMagIDString(aPtr: UNIV Ptr; bPtr: UNIV Ptr; aLen: INTEGER; bLen: INTEGER): INTEGER;
  283.     {$IFC NOT GENERATINGCFM}
  284.     INLINE $3F3C, $000C, $A9ED;
  285.     {$ENDC}
  286. FUNCTION IUCompString(aStr: Str255; bStr: Str255): INTEGER;
  287. FUNCTION IUEqualString(aStr: Str255; bStr: Str255): INTEGER;
  288. {$ENDC}
  289. {  FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED }
  290. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  291. FUNCTION RelString(str1: Str255; str2: Str255; caseSensitive: BOOLEAN; diacSensitive: BOOLEAN): INTEGER;
  292. FUNCTION EqualString(str1: Str255; str2: Str255; caseSensitive: BOOLEAN; diacSensitive: BOOLEAN): BOOLEAN;
  293. {$ENDC}
  294. {  FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  295. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  296. FUNCTION CreateCollationRef(collMasterObject: LocaleObjectRef; locale: LocaleRef; countPairs: ItemCount; {CONST}VAR pairs: NameValuePair; VAR newCollationRef: CollationRef): OSStatus; C;
  297. FUNCTION ChangeCollationRef(collationRef: CollationRef; collMasterObject: LocaleObjectRef; locale: LocaleRef; countPairs: ItemCount; {CONST}VAR pairs: NameValuePair): OSStatus; C;
  298. FUNCTION OverrideCollationSetOrder(collationRef: CollationRef; setCount: ItemCount; VAR setList: CollationSet): OSStatus; C;
  299. FUNCTION OverrideCollationSetOptions(collationRef: CollationRef; specCount: ItemCount; VAR specList: CollationSetOptionSpec): OSStatus; C;
  300. FUNCTION OverrideCollationNumberHandling(collationRef: CollationRef; numberOptions: CollateNumberOptions; tokenCount: ItemCount; VAR tokenList: BasicToken): OSStatus; C;
  301. FUNCTION DisposeCollationRef(VAR collationRef: CollationRef): OSStatus; C;
  302. FUNCTION GetCollationKeyForTextObject(collationRef: CollationRef; textObject: ConstTextObject; options: CollateOptions; maxCollationValues: ItemCount; VAR actualCollationValues: ItemCount; VAR collationKey: CollationValue): OSStatus; C;
  303. FUNCTION GetCollationKeyForTextString(collationRef: CollationRef; textPtr: ConstBytePtr; textLength: ByteCount; textEncoding: TextEncoding; options: CollateOptions; maxCollationValues: ItemCount; VAR actualCollationValues: ItemCount; VAR collationKey: CollationValue): OSStatus; C;
  304. FUNCTION CollateTextObjects(collationRef: CollationRef; textObject1: ConstTextObject; textObject2: ConstTextObject; options: CollateOptions; VAR weakOrder: CollateResult; VAR strictOrder: CollateResult): OSStatus; C;
  305. FUNCTION CollateTextStrings(collationRef: CollationRef; textPtr1: ConstBytePtr; textLength1: ByteCount; textEncoding1: TextEncoding; textPtr2: ConstBytePtr; textLength2: ByteCount; textEncoding2: TextEncoding; options: CollateOptions; VAR weakOrder: CollateResult; VAR strictOrder: CollateResult): OSStatus; C;
  306. FUNCTION EquivalentTextObjects(collationRef: CollationRef; textObject1: ConstTextObject; textObject2: ConstTextObject; options: CollateOptions; VAR equivalent: BOOLEAN): OSStatus; C;
  307. FUNCTION EquivalentTextStrings(collationRef: CollationRef; textPtr1: ConstBytePtr; textLength1: ByteCount; textEncoding1: TextEncoding; textPtr2: ConstBytePtr; textLength2: ByteCount; textEncoding2: TextEncoding; options: CollateOptions; VAR equivalent: BOOLEAN): OSStatus; C;
  308. FUNCTION FindInTextObject(collationRef: CollationRef; baseText: ConstTextObject; baseStartIndex: TextObjectIndex; baseEndIndex: TextObjectIndex; pattern: ConstTextObject; patStartIndex: TextObjectIndex; patEndIndex: TextObjectIndex; options: CollateOptions; VAR foundStartIndex: TextObjectIndex; VAR foundEndIndex: TextObjectIndex): OSStatus; C;
  309. FUNCTION FindInTextString(collationRef: CollationRef; baseText: ConstBytePtr; baseLength: ByteCount; baseEncoding: TextEncoding; baseStartIndex: ByteOffset; baseEndIndex: ByteOffset; patText: ConstBytePtr; patLength: ByteCount; patEncoding: TextEncoding; patStartIndex: ByteOffset; patEndIndex: ByteOffset; options: CollateOptions; VAR foundStartIndex: ByteOffset; VAR foundEndIndex: ByteOffset): OSStatus; C;
  310. FUNCTION SubstituteInTextObject(collationRef: CollationRef; baseText: TextObject; startIndex: TextObjectIndex; endIndex: TextObjectIndex; substText: ConstTextObject; pattern: ConstTextObject; options: CollateOptions): OSStatus; C;
  311. {
  312.  Locale-insensitive utilities for text objects
  313.  For internal, user-invisible behavior thay must remain invariant across different systems
  314. }
  315. FUNCTION CollateTextObjectsNoLocale(textObject1: ConstTextObject; textObject2: ConstTextObject; options: CollateOptions; VAR weakOrder: CollateResult; VAR strictOrder: CollateResult): OSStatus; C;
  316. FUNCTION EquivalentTextObjectsNoLocale(textObject1: ConstTextObject; textObject2: ConstTextObject; options: CollateOptions; VAR equivalent: BOOLEAN): OSStatus; C;
  317. FUNCTION FindInTextObjectNoLocale(baseText: ConstTextObject; baseStartIndex: TextObjectIndex; baseEndIndex: TextObjectIndex; pattern: ConstTextObject; patStartIndex: TextObjectIndex; patEndIndex: TextObjectIndex; options: CollateOptions; VAR foundStartIndex: TextObjectIndex; VAR foundEndIndex: TextObjectIndex): OSStatus; C;
  318. {$ENDC}
  319. {  FOR_SYSTEM8_PREEMPTIVE }
  320. {$ALIGN RESET}
  321. {$POP}
  322.  
  323. {$SETC UsingIncludes := StringCompareIncludes}
  324.  
  325. {$ENDC} {__STRINGCOMPARE__}
  326.  
  327. {$IFC NOT UsingIncludes}
  328.  END.
  329. {$ENDC}
  330.